CXX = c++
CXXFLAGS = -std=c++17 -I. -g
CXXFLAGS += -DDEBUG
LDFLAGS = -lgtest -lpthread

OBJS = lexer.o parser.o vm.o cgen.o ast.o instruction.o \
	loader.o linker.o generator.o printer.o type.o operator.o \
	pcode.o

TARGET = main
TEST = test
ALL = $(OBJS) main.o test.o

.PHONY: all clean run

all: $(TEST)

$(TEST) : $(OBJS) test.o
	$(CXX) $(LDFLAGS) -o $@ $^

$(TARGET) : $(OBJS) main.o
	$(CXX) -o $@ $^


%.o.d : %.cpp
	@set -e; rm -f $@; $(CXX) -MM $(CXXFLAGS) $<  > $@.$$$$.dep; \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$.dep > $@; \
    rm -f $@.$$$$.dep

-include $(ALL:.o=.o.d)

clean:
	@rm -f *.o *.o.d $(TARGET) $(TEST) *.dep

